Currently in computing, data fragmentation is a common phenomenon when storage of a fixed size is used for data fragments of varying sizes. As data fragments are added and deleted from the storage areas, the storage space may become fragmented with areas of unused space existing between areas of in use space. As time progresses, these storage areas typically may become more fragmented requiring more storage than what would logically be needed. As such, the difference between the logical storage requirement and the physical storage usage may then determine the amount of fragmentation that exists.
To rectify this problem, an expensive operation is typically needed to compact or defragment the storage (i.e., data) area, removing all the empty spaces. However, due to the expense of performing the defragmentation operation, it is not desirable to perform the defragmentation operation often.
Furthermore, current methods of defragmentation merely try to defragment any space that can be defragmented without determining which storage areas need to be defragmented. Additionally, these methods of defragmentation typically involve a search for items to defragment. As such, this may be an input/output (I/O) intense process depending on the size and scope of the search for fragmented data areas. Therefore, the performance benefits of defragmenting frequently accessed data areas may be compromised.